/* 
 * File:   IFastDataApprox.h
 * Author: shadius
 *
 * Created on 11. listopad 2012, 12:09
 */
#ifndef IFASTDATAAPPROX_H
#define	IFASTDATAAPPROX_H
#define floattype double
#if _MSC_VER >= 1400
#define OVERRIDE override
#define SEALED sealed
#define INTERFACE __interface
#define INHERITANCE :public IUnknown
#define WINAPI WINAPI
#define HRESULT HRESULT
#define VIRTUAL

#else
#define OVERRIDE
#define SEALED
#define INTERFACE class
#define INHERITANCE
#define WINAPI
#include "HRESULT.h"
#define VIRTUAL virtual
#define PUREVIRTUAL =0
#define PUBLIC public:

#endif

const floattype OneMinute = 1.0/(24.0*60.0);
const floattype OneSecond = 1.0/(24.0*60.0*60.0);

typedef struct _APPROXPOINT {
    floattype x;
    floattype y;
} APPROXPOINT, *LPAPPROXPOINT;

INTERFACE IFastDataApprox INHERITANCE {
PUBLIC
    VIRTUAL HRESULT WINAPI AddBuf(LPAPPROXPOINT points, int len, int *added)  PUREVIRTUAL;
      //nemusí být implementována, může vracet E_NOTIMPL


    VIRTUAL HRESULT WINAPI GetBuf(LPAPPROXPOINT points, floattype step, int len, int *filled) PUREVIRTUAL;
      //získá aproximované hodnoty b(t) či i(t)
      //points[0].X je čas, tj. t, první hodnoty, points[1].X = points[0].X+step, atd.
      //len je velikost *points v APPROXPOINTS
      //*filled bude po návratu z volání funkce obsahovat počet vyplněnách prvků *points

      //vrací S_OK pokud je vše v pořádku
      //S_FALSE pokud bylo zadáno příliš málo dat, než aby šla aproximovat
      //E_INVALIDARG pookud je špatný některý ze vstupních parametrů
      //případně jiný relevatní kód viz http://msdn.microsoft.com/en-us/library/windows/desktop/aa378137%28v=vs.85%29.aspx

    VIRTUAL HRESULT WINAPI EnumBuf(int *index, LPAPPROXPOINT points, int len, int *filled) PUREVIRTUAL;
      //vrací neaproximované hodnoty, první hodnota má index 0
      //*points s počtem prvků len vyplní zadanými, neaproximovanými hodnotami
      //*filled je počet vrácených prvků, způsobí *index += *filled
      //vrací S_OK pokud vše OK, pokud *filled=0 pak S_FALSE
      //nemusí být implementována, může vracet E_NOTIMPL


    VIRTUAL HRESULT WINAPI GetPrecedingPoint(floattype x, int *index) PUREVIRTUAL;

    VIRTUAL HRESULT WINAPI Count(int *cnt) PUREVIRTUAL;
      //vrací počet zadaných prvků
      //nemusí být implementována, může vracet E_NOTIMPL

    VIRTUAL HRESULT WINAPI Clear(int start, int stop) PUREVIRTUAL;
      //nemusí být implementována, může vracet E_NOTIMPL
};



#endif	/* IFASTDATAAPPROX_H */

